/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import view.AsistenciasPanel;
import view.FabricaPaneles;
import view.InicialPanel;
import view.LoginPanel;
import view.NavigationPanel;
import view.PrincipalGUI;
import view.Temporal;
import view.UsuarioPanel;
import view.adAlumnos.BuscarAlumnoPanel;
import view.adAlumnos.CertificadoPanel;
import view.adAlumnos.CuotaPanel;
import view.adAlumnos.InformacionPanel;
import view.adAlumnos.InscripcionExamenPanel;
import view.adAlumnos.InscripcionMateriaPanel;
import view.adAlumnos.RegularidadPanel;
import view.adPlanEstudio.CarrerasPanel;
import view.adPlanEstudio.CorrelatividadesPanel;
import view.adPlanEstudio.InstanciasEvaluadorasPanel;
import view.adPlanEstudio.MateriasPanel;
import view.adPlanEstudio.ModificarTurnoPanel;
import view.adPlanEstudio.TurnoPanel;
import view.informes.EgresadosPanel;
import view.informes.InformeAlumnosPanel;
import view.informes.PromediosPanel;
import view.informes.RegistroPanel;
//__

/**
 * @author Ponzoni, Nelson; Pioli, Pablo
 */
public class ControladorPrincipal implements ActionListener {

    //vista
    private PrincipalGUI principal;
    private JPanel currentPanel, titlePanel;
    private Controlador currentController;
    private NavigationPanel navPanel;
    private ControladorNav controladorNav;
    //Comandoooooooooooooooooo
    //private Command cambiarPanel;
    //HOHOHOHO
    public boolean sesion;
   
    //acciones que se ejecuta por los controles de cada VISTA
    public enum Accion {

        IniciarSesion,
        CerrarSesion,
        AltaAlumno,
        ConsultarAlumno,
        Carrera,
        Correlatividades,
        Materias,
        NuevoUsuario,
        ModificarUsuario,
        NuevoPago,
        Salir,
        InscripcionMateria,
        CertificadoTraMat,
        ExtenderRegularidad,
        ConsultarAsistencias,
        CargarNotas,
        InstanciasEvaluadoras,
        NuevoTurno,
        InformeEgresados,
        MejorPromedio,
        InformeAlumnos,
        ModificarTurnoExa,
        InscripcionExamen,
        CancelarExamen,
        RegistroActividad,
        Inicio
    }

    /**
     * Constructor de clase
     */
    public ControladorPrincipal(JFrame padre) {
        this.principal = (PrincipalGUI) padre;
        sesion=false;
        //Se cargan paneles vacios pa que no tire error
        currentPanel = new JPanel();
        //parametros vacios para el navpanel inicial
        String[] titulos = {""};
        navPanel = FabricaPaneles.getNavigationPanel(titulos, (int)currentPanel.getPreferredSize().getWidth());
        
        titlePanel = new JPanel();
        
        //se setea el commando (cambiar a ventana de bienvenida por defecto).
        //cambiarPanel = new ChangePanelCommand(principal, currentPanel, titlePanel, navPanel);
        
        //CAMBIAR LUEGO
        metodoReChoto( new InicialPanel(), "Bienvenido", "");
        currentController=new ControladorInicial(currentPanel);
        
        //controlador de navegacion
        controladorNav = new ControladorNav(navPanel, this);
        controladorNav.iniciar();
    }
     public JPanel getcurrentPanel() {
        return currentPanel;
        
    }
    public void metodoReChoto( InicialPanel contenido, String titulo, String botonesLabels){
        
        if(sesion){
            contenido.Barra1.setVisible(true);
            contenido.Barra2.setVisible(true);
            contenido.placeHolder.setVisible(true);
        }
        cambiarPanel(contenido, titulo, botonesLabels);
        
    }
     /**
     * Especifica panel de navegacion, carga la barra seleccionada
     * @param contenido
     * @param titulo 
     */
    public void cambiarPanel ( JPanel contenido, String titulo, String botonesLabels){
        //borra el panel actual, la barra de navegacion etc..
        principal._title.remove(titlePanel);
        principal._content.remove(currentPanel);
        
        
        //setea nuevos paneles
        currentPanel = contenido;
        
        titlePanel = FabricaPaneles.getTitlePanel(titulo);
        
         //barra de titulo
        principal._title.add(titlePanel);
        
        //añade el paneñ principal
        principal._content.add(currentPanel);
        
        //barra de navegacion
        cambiarPanelNavegacion(botonesLabels);
                      
        //actualizo vista
        principal.validate();          
    }
    
    public void cambiarPanelNavegacion(String input){
        String[] param;
        if (input==""){
            param = new String[3];
        }else{
            param = input.split(",");   
        }
        principal._navigation.remove(navPanel);
        
        navPanel = FabricaPaneles.getNavigationPanel(param, (int)currentPanel.getPreferredSize().getWidth());
        controladorNav = new ControladorNav(navPanel, this);
        controladorNav.iniciar();
        principal._navigation.add(navPanel);
 
    }
    /**
     * No especifica panel de navegacion, carga el default
     * 
     * @param contenido
     * @param titulo 
     */
    
    
    /**
     * Inicia todos las acciones y listener de la vista
     */
    public void iniciar() {
        
        // Skin tipo WINDOWS
        try {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());              // automatico
                
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
                Logger.getLogger(ControladorPrincipal.class.getName()).log(Level.SEVERE, null, ex);
            }
            //se hace visible la ventana
            this.principal.setVisible(true);
        } catch (UnsupportedLookAndFeelException ex) {
            //se imprime mensaje de error
            System.out.println(ex.getMessage());
        }

        // menu->iniciar sesion
        this.principal.RegistroActividad.setActionCommand("RegistroActividad");
        this.principal.RegistroActividad.addActionListener(this);
        
        this.principal.MsIniciarSesion.setActionCommand("IniciarSesion");
        this.principal.MsIniciarSesion.addActionListener(this);

        this.principal.AltaAlumno.setActionCommand("AltaAlumno");
        this.principal.AltaAlumno.addActionListener(this);

        this.principal.ConsultarAlumno.setActionCommand("ConsultarAlumno");
        this.principal.ConsultarAlumno.addActionListener(this);
        
        this.principal.Carrera.setActionCommand("Carrera");
        this.principal.Carrera.addActionListener(this);
        
        this.principal.Correlatividades.setActionCommand("Correlatividades");
        this.principal.Correlatividades.addActionListener(this);
        
        this.principal.Materias.setActionCommand("Materias");
        this.principal.Materias.addActionListener(this);
        
        this.principal.NuevoUsuario.setActionCommand("NuevoUsuario");
        this.principal.NuevoUsuario.addActionListener(this);
        
        this.principal.ModificarUsuario.setActionCommand("ModificarUsuario");
        this.principal.ModificarUsuario.addActionListener(this);
        
        this.principal.NuevoPago.setActionCommand("NuevoPago");
        this.principal.NuevoPago.addActionListener(this);
        
        this.principal.MsSalir.setActionCommand("Salir");
        this.principal.MsSalir.addActionListener(this);
        
        this.principal.InscripcionAmateria.setActionCommand("InscripcionMateria");
        this.principal.InscripcionAmateria.addActionListener(this);
        
        this.principal.CertificadoTraMat.setActionCommand("CertificadoTraMat");
        this.principal.CertificadoTraMat.addActionListener(this);
        
        this.principal.ExtensionRegularidad.setActionCommand("ExtenderRegularidad");
        this.principal.ExtensionRegularidad.addActionListener(this);
        
        this.principal.ConsultarAsistencia.setActionCommand("ConsultarAsistencias");
        this.principal.ConsultarAsistencia.addActionListener(this);
        
        this.principal.CargarNotas.setActionCommand("CargarNotas");
        this.principal.CargarNotas.addActionListener(this);
        
        this.principal.InstanciasEvaluadoras.setActionCommand("InstanciasEvaluadoras");
        this.principal.InstanciasEvaluadoras.addActionListener(this);
        
        this.principal.ModificarTurnoExa.setActionCommand("ModificarTurnoExa");
        this.principal.ModificarTurnoExa.addActionListener(this);
        
        this.principal.NuevoTurnoExa.setActionCommand("NuevoTurno");
        this.principal.NuevoTurnoExa.addActionListener(this);
        
        this.principal.Egresados.setActionCommand("InformeEgresados");
        this.principal.Egresados.addActionListener(this);
        
        this.principal.MejorPromedio.setActionCommand("MejorPromedio");
        this.principal.MejorPromedio.addActionListener(this);
//        
        this.principal.InformeAlumnos.setActionCommand("InformeAlumnos");
        this.principal.InformeAlumnos.addActionListener(this);
        
        this.principal.IncripcionExamen.setActionCommand("InscripcionExamen");
        this.principal.IncripcionExamen.addActionListener(this);
        
        this.principal.CancelarInscripcionExa.setActionCommand("CancelarExamen");
        this.principal.CancelarInscripcionExa.addActionListener(this);
        
        this.principal.InicioBoton.setActionCommand("Inicio");
        this.principal.InicioBoton.addActionListener(this);
        
        this.principal.CerrarSesion.setActionCommand("CerrarSesion");
        this.principal.CerrarSesion.addActionListener(this);
    }

    /**
     * Gestion de accciones
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        switch (Accion.valueOf(e.getActionCommand())) {
           
//----------------------------------------------------------------------------------------------------------
            case IniciarSesion:
                //Cambia el panel
                cambiarPanel(new LoginPanel(), "Iniciar Sesion", "Iniciar Sesion,Volver");
                
                //cambia el controlador
                currentController= new ControladorLogin(currentPanel);
                break;
//------------------------------------------------------------------------------------------------------------------------
            case ConsultarAlumno:
                //Cambia el panel
                cambiarPanel(new BuscarAlumnoPanel(), "Consultar Alumno","Buscar Alumno,Volver");
                //cambia el controlador
                currentController = new ControladorBuscarAlumno(currentPanel);
                break;
//--------------------------------------------------------------------------------------------------------------------------
            case AltaAlumno:
                cambiarPanel (new InformacionPanel(),"Nuevo Alumno","Dar de alta,Cancelar");
                currentController = new ControladorAlumno(currentPanel);
                break;
//------------------------------------------------------------------------------------------------------------------------
            case Carrera:
                cambiarPanel(new CarrerasPanel(), "Carrera","Confirmar Cambios,Volver");
                currentController = new ControladorCarrera(currentPanel); 
                break;
//----------------------------------------------------------------------------------------------------------------------------
            case Correlatividades:
                cambiarPanel (new CorrelatividadesPanel(), "Correlatividades","Guardar,Volver");
                currentController = new ControladorCorrelatividades(currentPanel); 
                break;
//----------------------------------------------------------------------------------------------------------------------------
            case Materias:
                cambiarPanel (new MateriasPanel(), "Materias","Guardar,Volver");
                currentController = new ControladorMateria(currentPanel); 
                break;
//----------------------------------------------------------------------------------------------------------------------------
            case NuevoUsuario:
                cambiarPanel (new UsuarioPanel(),"Nuevo Usuario del Sistema","Aceptar,Volver");
                currentController = new ControladorUsuario(currentPanel); 
                break;
//----------------------------------------------------------------------------------------------------------------------------
            // la idea seria que pasando un string por ejemplo habilite la modificacion
            case NuevoPago:
                cambiarPanel (new CuotaPanel(), "Registrar Pago","Registrar Pago,Cancelar");
                currentController = new ControladorCuota(currentPanel); 
                break;
//----------------------------------------------------------------------------------------------------------------------------
            case Salir:
                System.exit(0);
                break;
//----------------------------------------------------------------------------------------------------------------------------
            case InscripcionMateria:
                cambiarPanel (new InscripcionMateriaPanel(), "Inscripcion a una materia","Inscribir Seleccionados,Cancelar");
                currentController = new ControladorInsMateria(currentPanel); 
                break;
  //----------------------------------------------------------------------------------------------------------
            case CertificadoTraMat:
                cambiarPanel (new CertificadoPanel(), "Certificado de Trabajo o Maternidad","Aceptar,Cancelar");
                currentController = new ControladorCertifMaternidad(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
            case ExtenderRegularidad:
                cambiarPanel(new RegularidadPanel(), "Extender Regularidad","Extender,Cancelar");
                currentController = new ControladorRegularidad(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
            case ConsultarAsistencias:
                AsistenciasPanel asis = new AsistenciasPanel();
                

                cambiarPanel (asis, "Cargar Asistencias","Cargar,Volver,Ver Anteriores");
                currentController = new ControladorAsistencias(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
            case CargarNotas:
                cambiarPanel (new AsistenciasPanel(), "Cargar Notas","Cargar Seleccionado,Volver,Ver Anteriores");
                currentController = new ControladorNotas(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
            case InstanciasEvaluadoras:
                cambiarPanel (new InstanciasEvaluadorasPanel(), "Instancias Evaluadoras","Añadir,Modificar,Volver");
                currentController = new ControladorInstancias(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
//            case NuevaInstanciaEvaluadora:
//                cambiarPanel (new NuevaInstanciaEvaluadoraPanel(), "Nueva Instancia Evaluadora");
//                currentController = new ControladorInstanciaNueva(currentPanel);
//                break;
              case NuevoTurno:
                  cambiarPanel (new TurnoPanel(), "Nuevo Turno de Examen","Guardar Cambios,Volver");
                  currentController = new ControladorInstanciaNueva(currentPanel);
                  break;
//------------------------------------------------------------------------------------------------------
              case ModificarTurnoExa:
                  cambiarPanel (new ModificarTurnoPanel(), "Modificar Turno de Examen","Guardar Cambios,Volver");
                  currentController = new ControladorModificarTurno(currentPanel);
                  break;
//----------------------------------------------------------------------------------------------------------
            case InformeEgresados:
                cambiarPanel (new EgresadosPanel(), "Informe de Egresados","Imprimir Informe,Volver");
                currentController = new ControladorEgresado(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
            case MejorPromedio:
                cambiarPanel (new PromediosPanel(), "Mejores Promedios","Imprimir Informe,Volver");
                currentController = new ControladorPromedio(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
            case InformeAlumnos:
                cambiarPanel (new InformeAlumnosPanel(), "Informe de Alumnos","Imprimir Informe,Volver");
                currentController = new ControladorInfAlumno(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
            case InscripcionExamen:
                cambiarPanel (new InscripcionExamenPanel(), "Inscripcion a Examen","Inscribir,Cancelar");
                currentController = new ControladorInsExamen(currentPanel);
                break;
//----------------------------------------------------------------------------------------------------------
            case CancelarExamen:
                cambiarPanel (new InscripcionExamenPanel(), "Cancelar Examen","Borrar Inscripcion,Cancelar");
                currentController = new ControladorInsExamen(currentPanel);
                break;
            case RegistroActividad:
                cambiarPanel (new RegistroPanel(), "Cancelar Examen","Volver");
                
                //ARREGLAR LUEGO
               currentController = new ControladorRegistroActividad(currentPanel);
                break;
            case Inicio:
                metodoReChoto(new InicialPanel(), "Bienvenido","");
                
                //ARREGLAR LUEGO
                currentController = new ControladorInicial(currentPanel);
                break;
            case CerrarSesion:
                sesion=false;
                metodoReChoto(new InicialPanel(), "Bienvenido","");
                
                //ARREGLAR LUEGO
                currentController = new ControladorInicial(currentPanel);
                break;
        }//-> fin case
        currentController.iniciar();
    }
}


